/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Cliente;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

/**
 *
 * @author Murilo
 */
public class Cliente {

    //dados para conexao com o receptor
    private InetAddress ServidorProxyIp;
    private int ServidorProxyPorta;
    private DatagramSocket socketCliente;
    private DatagramSocket socketRespostaProxy;
    private int portaRespostaProxy;

    public Cliente() throws UnknownHostException, SocketException {
        //Definem Ip e porta do receptor e cria o socket para comunicação no constructor
        this.ServidorProxyIp = InetAddress.getByName("localhost");
        this.ServidorProxyPorta = 4040;
        this.socketCliente = new DatagramSocket();
        //this.portaRespostaProxy = 2010;
        this.socketRespostaProxy = new DatagramSocket();
    }

    public void requisitarObjeto() throws IOException {
        //Prepara dados para envio concatena a porta e o Id do objeto
        String requisicao = this.gerarIdObjetoRequisicao() + "/" + this.socketRespostaProxy.getLocalPort();
        byte[] buffer = requisicao.getBytes();
        //Cria datagrama para envio
        DatagramPacket datagramaRequisicao = new DatagramPacket(buffer, buffer.length,
                this.ServidorProxyIp, this.ServidorProxyPorta);
        //Envia o datagrama para o receptor
        this.socketCliente.send(datagramaRequisicao);
        System.err.println("Objeto requisicao: " + requisicao);
    }

    public String receberObjeto() throws IOException {
        DatagramPacket datagramaResposta = new DatagramPacket(new byte[512], 512);
        this.socketRespostaProxy.receive(datagramaResposta);
        String ObjetoRecebido = new String(datagramaResposta.getData(), datagramaResposta.getOffset(),
                datagramaResposta.getLength());
        System.err.println("Objeto recebido Proxy: " + ObjetoRecebido);
        return ObjetoRecebido;
    }

    public void fecharCliente() {
        this.socketCliente.close();
    }

    public String gerarIdObjetoRequisicao() {
        String IdObjeto = String.valueOf((int) (Math.random() * 100 + 1));
        return IdObjeto;
    }
}
